/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Herramientas;

import Ajedrez.Ajedrez;
import Main.BotonCasilla;
import java.util.ArrayList;

/**
 *
 * @author Carlos
 */
public class Memento {

    private ArrayList<EstadoTablero> savedStates = new ArrayList<EstadoTablero>();
    private int estadoActual;

    public Memento() {
        this.estadoActual = -1;
    }

    
    public void guardarEstado(Ajedrez aj) {

 /*       if (estadoActual > savedStates.size()) // Se ha retrocedido y se ha movido de nuevo, teniendo que eliminar la rama antigua
        {
            for (int i = estadoActual; i < savedStates.size(); i++) {
                savedStates.remove(i);
            }
        }*/

        ArrayList<String> piezas = new ArrayList<String>();
        ArrayList<String> nombres = new ArrayList<String>();

        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                piezas.add(aj.ficha[i][j].getPieza());
                nombres.add(aj.ficha[i][j].getNombre());
            }
        }
        savedStates.add(new EstadoTablero(piezas, nombres));
        estadoActual++;

    }

    private void cargarEstado(Ajedrez aj, int index) {
        savedStates.remove(index+1);
        EstadoTablero tab = savedStates.get(index);
        ArrayList<String> piezas = tab.getPiezas();
        ArrayList<String> nombres = tab.getNombres();
        int n=0;
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                aj.ficha[i][j].setPieza(piezas.get(n));
                aj.ficha[i][j].setNombre(nombres.get(n));
                n++;
            }
        }
        aj.repintarImagenes();
        estadoActual = index;
    }

    public void cargarEstadoPasado(Ajedrez aj, int index) {
        if( index > 0 )
            cargarEstado(aj, index);
    }

    public void cargarEstadoAnterior(Ajedrez aj) {
        if( this.estadoActual >0 ){
            this.estadoActual--;
            cargarEstado(aj, this.estadoActual);
        }
    }

    public void cargarEstadoSiguiente(Ajedrez aj) {
        if(this.estadoActual < this.savedStates.size()){
            this.estadoActual++;
            this.cargarEstado(aj, estadoActual);
        }
    }
}
